/**
  ******************************************************************************
  * @file    delay_no_block.h
  * @author  ashuai0110
  * @version V2.3
  * @date    2024-07-01
  * @brief   非阻塞延时
  *
  ******************************************************************************
  * @attention
  *
  * 版权声明:内容为编者(ashuai0110)原创,使用请注明出处,当然,你也可以不这样做^_^
  * 出处链接:https://gitee.com/ashuai0110/mcu_reuse_development_module.git
  *
  ******************************************************************************
  */

#ifndef __DELAY_NO_BLOCK_H
#define __DELAY_NO_BLOCK_H

#ifdef __cplusplus
extern "C" {
#endif

/* 包含头文件-----------------------------------------------------------------*/
#include "common_include.h"

/**
 * @addtogroup modules
 * @{
 */

/**
 * @addtogroup delay_no_block
 * @{
 */

/* 宏定义---------------------------------------------------------------------*/
/**
 * @defgroup delay_no_block_global_macros delay no block global macros
 * @{
 */

/**
 * @defgroup delay_task_size delay task size
 * @{
 */
#define DELAY_TASK_SIZE                 (20u) /* 最大任务数量(1-65534) 用户按需修改 */
/**
 * @}
 */

/**
 * @}
 */

/* 类型定义-------------------------------------------------------------------*/
/**
 * @defgroup delay_no_block_global_types delay no block global types
 * @{
 */

/** 
  * @brief  延时任务ID type define
  */
typedef unsigned short delay_id_t;

/** 
  * @brief  延时任务 structure definition
  */
typedef struct delay_item {
    volatile uint32_t ticks;  /* 延时任务计数值 */
    uint8_t run : 1; /* 延时任务运行状态 0:不运行(未创建) 1:运行中(被创建) */
} delay_item_t;

/**
 * @}
 */

/* 全局变量-------------------------------------------------------------------*/

/* 函数原型-------------------------------------------------------------------*/
/**
 * @addtogroup delay_no_block_global_functions
 * @{
 */

uint8_t delay_init(delay_id_t *_id, uint32_t delayTicks);

void delay_de_init(delay_id_t *_id);

uint8_t delay_wait(delay_id_t *_id);

/**
 * @}
 */

/**
 * @}
 */

/**
 * @}
 */

#ifdef __cplusplus
}
#endif

#endif /* delay_no_block.h */
